{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f0aec93a",
   "metadata": {
    "id": "5F72205220C2411C8C618306CD03AE13",
    "jupyter": {},
    "mdEditEnable": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "# Python机器学习Kaggle案例实战（第21期） 第10课书面作业\n",
    "学号：113778\n",
    "\n",
    "**作业内容：**  \n",
    "1. 总结归纳10周课程中你所学到的一些方法，技巧，算法等  \n",
    "2. 对于这周的案例，你觉得还可以用什么方法解决？有什么好的特征提取方法？详细说说你的思路"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a04697e",
   "metadata": {
    "id": "FB4A874D24C34EE9925CE949C403EB2C",
    "jupyter": {},
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 作业1\n",
    "总结归纳10周课程中你所学到的一些方法，技巧，算法等。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "975547cd",
   "metadata": {
    "id": "A89BC7A435A94BCC8F79532AFA8ACC76",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "613ab9eb1859e60017817a77",
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "| 项目       | 特征工程                                                     |\n",
    "| ---------- | ------------------------------------------------------------ |\n",
    "| 常规特征   | 通过count&ratio来派生特征                                    |\n",
    "| 文本类数据 | 1. n-gram方法  <br>2. Jaccard coefficient and Dice distance获取文本数据距离特征 <br>3. TF-IDF特征 |\n",
    "| 图像数据   | 判断图像相似性:<br>直方图交叉核<br>平均哈希、感知哈希、差异哈希<br>汉明距离 |\n",
    "| 分类型数据 | One-hot编码<br>Entity embedding+神经网络                     |\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b6ecfe3",
   "metadata": {
    "id": "E7658629D0BD4466B0482A753DE3E8EA",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "613ab9eb1859e60017817a77",
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "| 模型    | 技巧                                                         |\n",
    "| ------- | ------------------------------------------------------------ |\n",
    "| XGBoost | 高效决策树模型，适用于分类及回归建模以及特征选择等场景。     |\n",
    "| FM/FFM  | FM/FFM可以自动且高效地构建特征与特征之间隐性向量的内积交互关系。原则上FM可以建模出更高阶特征交互，但是在实践中通常只到2阶，主要由于高度复杂性以及效率问题。FFM是FM的升级版模型，通过引入field的概念，FFM把相同性质的特征归于同一个field，隐向量不仅与特征相关，也与field相关。 |\n",
    "| BPN     | 神经网络自动学习复杂的特征关系，通过误差反向传播方法实现模型学习。 |\n",
    "| FNN/PNN | 深度神经网络具有学习复杂特征交互的能力。比如用CNN/RNN来进行CTR预测，但基于CNN的模型偏向于相邻特征之间的交互，而基于RNN的模型更适合于具有序列依赖关系的点击数据。FM支持的神经网络（FNN），在这种模型下，在应用前用FM进行了预训练再传入DNN网络，因此其本身特征交互的表示能力受到FM模型的限制。还有模型通过在嵌入层和完全连接层之间引入Product layer，提出了基于乘积的神经网络（PNN）。PNN和FNN，以及其他深度模型，捕捉很少的低阶特征交互，而这些对于CTR预测也很重要。 |\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ddddcc34",
   "metadata": {
    "id": "41DF90C7F46443088F74FA010C722EFC",
    "jupyter": {},
    "mdEditEnable": false,
    "scrolled": true,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 作业2\n",
    "对于这周的案例，你觉得还可以用什么方法解决？有什么好的特征提取方法？详细说说你的思路。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a4909d5",
   "metadata": {
    "id": "7EFDB6CDBCEC4F6F80AEAA3E116AA3C9",
    "jupyter": {},
    "mdEditEnable": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "**总体思路：**\n",
    "1. 本周案例中，数据集中的特征不多，因此需要构建一些派生的特征来提升模型的精度。\n",
    " - 通过特征组合来生成新的特征；\n",
    " - 通过特征计数/比例来生成新特征；\n",
    " - 通过特征相加/相乘/相除来生成新特征；\n",
    "2. 另外需要构建多个原理上有差异的模型，最后再用组合学习方法，综合训练一个模型来。\n",
    " - 用1个LR模型。在这个模型中首先需要去除多重共线性的问题。\n",
    " - 用1个XGBoost决策树模型。\n",
    " - 用1个GBDT+LR模型，用GBDT训练得到树模型构建特征再输入LR模型建模。\n",
    " - 用1个FM模型，自动构建特征与特征间的交互关系。\n",
    " - 用1个Entity embedding+MLP模型，因为分类型数据比较多，采用实体嵌入方式与神经网络嵌入方式建模。\n",
    " - 综合上述5个模型再进行组合学习，学习中各个模型的权值需要根据实际情况来调整。\n",
    "3. 在进行模型训练前，要看一下训练集与测试集的分布情况，两者是否比较接近。如果分布接近，我们可以放心针对训练集进行合适的优化，而不用过多担心出现过拟合的问题。如果两者在分布上不是十分接近，那么就需要再进行一些特征提取工作，增加一些新的特性使用两者在分布上尽量的接近。\n",
    " - 分析训练集与测试集是否分布一致的思路：将训练集与测试集合并，去除目标变量，增加一列变量作为新的目标变量，该目标变量取值1表示属于训练集，0表示属于测试集。然后用不同分类模型去尝试能否区分训练集与测试集，如果训练结果表明能够区分（训练得分超过0.55）,表明训练集与测试集分布相差比较明显，如果训练后得分接近0.5表示训练集与测试集分布接近。\n",
    " - 增加特征的方法见前面章节。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c6941c75",
   "metadata": {
    "id": "024BB34C6E2845869C5BBD5A3629AD32",
    "jupyter": {},
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
